home *** CD-ROM | disk | FTP | other *** search
- {
- With this program you can view monocrome pcx files, smaller than 60KB. It
- will only work on VGA cards.
-
- A Program to view monocrome PCX files
-
- A MacSoft production in 1994 by Andreas Oestlund
- }
- Type
- TPCX_Header = Record
- Manufacturer : Byte; {always A0h }
- Version : Byte; {version }
- Encoding : Byte; {always 1}
- Bits_Per_Pixel : Byte; {color bits}
- XMin,YMin : Word; {image origin}
- XMax,YMax : Word; {dimensions}
- HRes : Word; {resolution val}
- VRes : Word; {}
- Palette : Array[1..48] Of Byte;{palette}
- Reserved : Byte; {}
- Color_Planes : Byte; {color planes}
- Bytes_Per_Line : Word; {line buffer
- size} Palette_Type : Word; {gray or
- color pal} Filler : Array[1..58] Of Byte;{}
- End;
-
- TPCXData = Array[1..60000] Of Byte;
-
- Procedure SetMode (m : Byte); Assembler;
- Asm
- Mov AH, 0
- Mov AL, m
- Int 10h
- End;
-
- Var
- Header : TPCX_Header;
- F : File;
- B,C : Byte;
- Line_Table : Array[0..479] Of Word;
- PcxData : ^TPcxData;
-
- Width,
- Height,
- Bytes_Per_Line : Word;
-
- NuRead : Word;
-
- Procedure Decode_PCX_Line (l : Word);
- Var
- i,j : Word;
-
- Const
- Data_NDX : Word = 0;
-
- Begin
- i := 0;
- While i < Bytes_Per_Line Do
- Begin
- Inc (Data_NDX);
- B := PcxData^[Data_NDX];
-
- If (B And $C0) = $C0 Then
- Begin
- B := B And $3F;
-
- Inc (Data_NDX);
- C := PcxData^[Data_NDX];
- For j := 1 To B Do
- Begin
- Mem[$A000:Line_Table[l]+i] := C;
- Inc (i);
- End;
- End
- Else
- Begin
- Mem[$A000:Line_Table[l]+i] := B;
- Inc (i);
- End;
- End;
- End;
-
- Var
- i : Word;
- Mem2Get : Word;
-
- Begin
- If Paramcount = 0 then HALT;
- Assign (F,ParamStr(1));
- Reset (F,1);
-
- BlockRead (F,Header,SizeOf(TPCX_Header));
- Width := (Header.XMax - Header.XMax)+1;
- Height := (Header.YMax - Header.YMin)+1;
- Bytes_Per_Line := Header.Bytes_Per_Line;
- For i := 0 To 479 Do Line_Table[i] := i*80;
-
- Mem2Get := FileSize(F) - FilePos(F);
- GetMem (PcxData,Mem2Get);
- BlockRead (F,PcxData^,60000,NuRead);
-
- SetMode ($12);
-
- For i := 0 To (Height-1) Do Decode_PCX_Line (i);
-
- Readln;
-
- FreeMem (PcxData,Mem2Get);
- SetMode (3);
- Close (F);
- End.